package edu.nwpu.dao;


import edu.nwpu.pojo.User;
import org.apache.ibatis.annotations.Param;

import java.util.List;

public interface UserMapper {

    /**
     * 根据id查询用户，能查找到已经删除的用户
     *
     * @param id: user id
     *
     * @return edu.nwpu.pojo.User
     */
    User selectUserById(@Param("id") Long id);

    /**
     * 根据名称查询用户 ，能查找到已经删除的用户
     *
     * @param name: name
     *
     * @return edu.nwpu.pojo.User
     */
    User selectUserByName(@Param("name") String name);

    /**
     * 根据名称和密码查找用户，已经删除的用户无法查找
     *
     * @param name:
     * @param password:
     *
     * @return edu.nwpu.pojo.User
     */
    User selectUserByNameAndPassword(@Param("name") String name, @Param("pwd") String password);

    /**
     * 根据id和密码查找用户，能查找到已经删除的用户
     *
     * @param id:
     * @param password:
     *
     * @return edu.nwpu.pojo.User
     */
    User selectUserByIdAndPassword(@Param("id") Long id, @Param("pwd") String password);

    /**
     * 插入新用户
     *
     * @param user:
     *
     * @return int
     */
    int insertUser(User user);

    /**
     * 更新用户信息，密码和状态码不更新
     *
     * @param user:
     *
     * @return int
     */
    int updateUser(User user);

    /**
     * 更新用户密码
     *
     * @param id:
     * @param password:
     *
     * @return int
     */
    int updatePasswordByUserId(@Param("id") Long id, @Param("pwd") String password);

    /**
     * 更新用户的状态码
     *
     * @param id:
     * @param statusCode:
     *
     * @return int
     */
    int updateUserStatusCode(@Param("id") Long id, @Param("statusCode") Integer statusCode);

    /**
     * 查询指定偏移量和数量的User
     * 用于分页查询，没有查询结果时返回空列表
     *
     * @param offset: 偏移量
     * @param limit: 最大数量
     *
     * @return java.util.List<edu.nwpu.pojo.User> 查询结果列表
     */
    @Deprecated
    List<User> getUserList(@Param("offset") Integer offset, @Param("limit") Integer limit);

    @Deprecated
    List<User> selectAllUsers();

    @Deprecated
    int deleteUserById(@Param("id") Long id);
}
